package pers.wensheng.patterns.creator_pattern.prototype_pattern.deep_clone;

import java.io.*;

/**
 * 访问测试类
 * 深拷贝
 */
public class Client {
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        Citation citation = new Citation();
        citation.setStudent(new Student("张三"));

        //，也就是将我们的citation写到，序列化到我们的硬盘上，我们在多次读取对象，获取到的就是不同的奖状对象，以及里面的学生对象也是不同的对象
        Citation read = getDeepCloneObject(citation);
        read.getStudent().setName("李四");
        System.out.println(citation.getStudent().getName());
        System.out.println(read.getStudent().getName());

    }

    /**
     * 深克隆
     * 开始深克隆，用的是对象操作流
     * 序列化到我们的硬盘上，我们在多次读取对象，获取到的就是不同的奖状对象，以及里面的学生对象也是不同的对象
     * @param citation
     * @return
     * @throws IOException
     * @throws ClassNotFoundException
     */
    private static Citation getDeepCloneObject(Citation citation) throws IOException, ClassNotFoundException {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("deep_clone.txt"));
        oos.writeObject(citation);
        oos.close();
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("deep_clone.txt"));
        Citation read = (Citation) ois.readObject();
        ois.close();
        return read;
    }
}
